// 导入 axios
import axios from 'axios'
// 导入 轻提示
import { Toast } from 'vant'
// 导入token辅助函数
import { getToken } from './local'

// 创建请求对象 设置基地址
const request = axios.create({
  // 通过环境变量获取基地址
  baseURL: process.env.VUE_APP_URL
})

// 请求拦截器
request.interceptors.request.use(
  function (config) {
    console.log(config)
    // console.log(config.needToken)
    // 判断并携带token
    if (config.needToken) {
      // 如果需要token 并且token存在
      if (getToken()) {
        // 设置请求头 携带token
        config.headers.authorization = `Bearer ${getToken()}`
      }
    }

    // 发送之前干点事情
    return config
  },
  function (error) {
    return Promise.reject(error)
  }
)

// 响应拦截器
request.interceptors.response.use(
  function (response) {
    // 自定义的错误 都在 第一个回调中我们需要自行处理
    // console.log('response:', response)
    // 数据回来之后干点事情
    // 保存code
    const code = response.data.code
    // 外部少些一个.data
    if (code === 200) {
      // 成功返回数据
      return response.data
    } else if (code === 400 || code === 401 || code === 403) {
      // 人为弹框
      Toast.fail(response.data.message)
      // 请求异常 中断外部的 .then
      // 来一个错误 必须要是Error对象 实例化时 给空字符串即可
      // response.data.message 服务器返回的错误信息
      return Promise.reject(new Error(response.data.message))
      // return Promise.reject('error')
    }
  },
  // http请求错误才会进来
  function (error) {
    return Promise.reject(error)
  }
)
// 暴露出去
export default request
